package hotel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.io.IOException;
import java.sql.*;

import java.util.Vector;

import javax.swing.*;

public class AggiungiCamera extends JFrame implements ActionListener {
	ImageIcon iconav = new ImageIcon("Risorse/iconav.png"),
			iconax = new ImageIcon("Risorse/iconax.png");;
	private ResultSet rs = null;
	private Vector<String> row;
	private JPanel pannello;
	private JLabel nome, posti, mat, prezzoL;
	private JTextField nomeStanza, prezzo;
	private JComboBox numeroPersone;
	private JComboBox matrimoniale;
	private String[] clienti = { "1", "2", "3", "4" };
	private String[] sino = { "NO", "SI" };
	private JButton aggiungi;
	private GraficaHotel g;

	public AggiungiCamera(GraficaHotel g) {
		this.g = g;
		Image immagineIc = Toolkit.getDefaultToolkit().getImage(
				"Risorse/addRImg1.png");
		setIconImage(immagineIc);
		this.setTitle("Aggiungi Camera");
		this.setLocation(350, 250);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setResizable(false);
		pannello = new JPanel();
		nome = new JLabel("Numero Stanza:");
		pannello.add(nome);
		nomeStanza = new JTextField(5);
		pannello.add(nomeStanza);
		posti = new JLabel("Posti:");
		pannello.add(posti);
		numeroPersone = new JComboBox(clienti);
		pannello.add(numeroPersone);
		numeroPersone.addActionListener(this);
		prezzo = new JTextField(6);
		prezzoL = new JLabel("Prezzo:");
		pannello.add(prezzoL);
		pannello.add(prezzo);
		mat = new JLabel("Matrimoniale:");
		mat.setVisible(false);
		pannello.add(mat);
		matrimoniale = new JComboBox(sino);
		matrimoniale.setVisible(false);
		pannello.add(matrimoniale);
		aggiungi = new JButton("Aggiungi");
		aggiungi.addActionListener(this);
		pannello.add(aggiungi);
		add(pannello);
		this.setVisible(true);
		this.pack();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == numeroPersone) {
			if (Integer.valueOf((String) numeroPersone.getSelectedItem()) > 1) {
				mat.setVisible(true);
				matrimoniale.setVisible(true);
				this.pack();
			} else {
				mat.setVisible(false);
				matrimoniale.setVisible(false);
				this.pack();
			}
		} else if (e.getSource() == aggiungi) {
			try {
				if (!nomeStanza.getText().equals("")
						|| !prezzo.getText().equals("")) {
					boolean flag = false;
					if (matrimoniale.getSelectedItem().equals("SI"))
						flag = true;
					if (GraficaHotel.database
							.query("INSERT INTO CAMERE(numero,numeroposti,numpostioccupati,matrimoniale,stato,prezzo)"
									+ " VALUES('"
									+ nomeStanza.getText()
									+ "',"
									+ numeroPersone.getSelectedItem()
									+ ",0,"
									+ flag
									+ ",'DISPONIBILE','"
									+ prezzo.getText() + "')") == 0) {
						JOptionPane.showMessageDialog(null, "Stanza "
								+ nomeStanza.getText()
								+ " gia' presente nel Database!", "ERRORE",
								JOptionPane.ERROR_MESSAGE, iconax);
						this.setVisible(true);
					} else {
						JOptionPane.showMessageDialog(null,
								"Camera inserita correttamente!", "Ottimo",
								JOptionPane.INFORMATION_MESSAGE, iconav);
						if (g.disponibile.isSelected()
								|| g.nonSpecificato.isSelected()) {
							g.cerca.setText("");
							aggiungiRiga();
						}
						g.visualizzaCamere("SELECT numero,stato FROM CAMERE");
						this.dispose();
						g.setVisible(true);
					}
				} else {
					JOptionPane.showMessageDialog(null,
							"Completare tutti i campi!");
					this.setVisible(true);
				}
			} catch (SQLException | IOException e1) {
				e1.printStackTrace();
			}
		}
	}

	private void aggiungiRiga() throws SQLException {
		int c = 0;
		int count = GraficaHotel.modelCamere.getRowCount();
		count++;
		rs = GraficaHotel.database.stat
				.executeQuery("SELECT numero,numeroposti,matrimoniale,stato FROM CAMERE");
		ResultSetMetaData md = rs.getMetaData();
		int columnCount = md.getColumnCount();
		row = new Vector<String>(columnCount);
		if (count == 0) {
			for (int i = 2; i <= columnCount; i++) {
				row.add(rs.getString(i));
			}
			GraficaHotel.modelCamere.addRow(row);
		} else {
			while (rs.next()) {
				c++;
				if (count == c) {
					for (int i = 1; i <= columnCount; i++) {
						if (md.getColumnName(i).compareTo("matrimoniale") == 0) {
							if (rs.getBoolean(i)) {
								row.add("Si");
							} else
								row.add("No");
						} else
							row.add(rs.getString(i));
					}
					GraficaHotel.modelCamere.addRow(row);
				}
			}
		}
	}

}
